package br.com.future.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Calendar;

import org.apache.log4j.Logger;

import br.com.future.dao.interfaces.BloqueioDesbloqueioDAOI;
import br.com.future.jdbc.ConnectionFactory;
import br.com.future.log4j.Log4j;
import br.com.future.model.BloqueioDesbloqueio;
import br.com.future.model.Processo;

public class BloqueioDesbloqueioDAO implements BloqueioDesbloqueioDAOI {
	
	//chamando o metodo da classe Log4j.
	static Logger logger = Logger.getLogger(Log4j.class);

	private static Connection conn = null;
	private final String CONSULTAR = "SELECT CD_BLOQUEIO_DESBLOQ, DS_BLOQUEIO_DESBLOQ FROM AM_BLOQUEIO_DESBLOQ WHERE CD_BLOQUEIO_DESBLOQ = ?";
	private final String BLOQUEIO = "INSERT INTO AM_HIST_PROC_BLOQ_DESBLOQ(NR_PROCESSO,DT_BLOQUEIO_DESBLOQ,CD_BLOQUEIO_DESBLOQ) VALUES(?,?,?)";
	private final String LIMPAR = "DELETE FROM AM_HIST_PROC_BLOQ_DESBLOQ";
	public BloqueioDesbloqueioDAO(Connection conn){
		BloqueioDesbloqueioDAO.conn  = conn;
	}
	
	public BloqueioDesbloqueioDAO(){
		
	}
	
	public BloqueioDesbloqueio consultar(int codBloqueioDesbloqueio){
		
		conn = ConnectionFactory.getConnection();
		
		
		PreparedStatement ps = null;
		ResultSet rs = null;
		BloqueioDesbloqueio bloqueio = new BloqueioDesbloqueio();
		
		try{
			ps = conn.prepareStatement(CONSULTAR);
			ps.setInt(1, codBloqueioDesbloqueio);
			rs = ps.executeQuery();
			
			while (rs.next()){
				bloqueio.setCodigoBloqueioDesbloqueio(rs.getInt("CD_BLOQUEIO_DESBLOQ"));
				bloqueio.setDescricaoBloqueioDesbloqueio(rs.getString("DS_BLOQUEIO_DESBLOQ"));
			}
			
		}catch (SQLException e) {
			e.printStackTrace();
			//chamando a mensagem.
			logger.error(e.getMessage());
		}finally{
			if(conn != null ){
				ConnectionFactory.closeConnectionOracle(conn, rs, ps);
			}
		}
		return bloqueio;
	}
	
	public void  bloquearProcesso(Processo processo){
		conn = ConnectionFactory.getConnection();
		
		PreparedStatement ps = null;
		ResultSet rs = null;
		Calendar dataAbertura= Calendar.getInstance();
		try{
			ps = conn.prepareStatement(BLOQUEIO);
			ps.setLong(1, processo.getNumeroProcesso());
			Calendar dataAtual = Calendar.getInstance();
			dataAbertura.setTime(dataAtual.getTime());
			ps.setDate(2, new java.sql.Date(dataAbertura.getTimeInMillis()));
			
			ps.setLong(3, 1);
			ps.executeQuery();
		}catch (SQLException e) {
			e.printStackTrace();
			//chamando a mensagem.
			logger.error(e.getMessage());
		}finally{
			if(conn != null ){
				ConnectionFactory.closeConnectionOracle(conn, rs, ps);
			}
		}
	}
	
	public void limparProcessos(){
		conn = ConnectionFactory.getConnection();
		
		PreparedStatement ps = null;
		ResultSet rs = null;
		try{
			ps = conn.prepareStatement(LIMPAR);
			ps.executeQuery();
		}catch (SQLException e) {
			e.printStackTrace();
			//chamando a mensagem.
			logger.error(e.getMessage());
		}finally{
			if(conn != null ){
				ConnectionFactory.closeConnectionOracle(conn, rs, ps);
			}
		}
	}
}
